jjzjj

Java ExecutorService 和 ThreadPoolExecutor

全部标签

java - 使用 ThreadPoolExecutor 的 Activity 任务数

我正在使用ThreadPoolExecutor在我的Java应用程序中执行任务。我有一个要求,我想在执行程序队列中的任何时间点获取队列中Activity任务的数量。我抬头看了看javadoc对于ThreadPoolExecutor并找到了两个相关方法:getTaskCount()和getCompletedTaskCount()。根据文档,我可以分别从上述两种方法中获取计划任务数和已完成任务数。但是我无法找到在任何时间点获取队列中Activity任务数的解决方案。我可以做类似的事情:getTaskCount()=getCompletedTaskCount()+failedtasks+ac

java - 工作/任务窃取 ThreadPoolExecutor

在我的项目中,我正在构建一个Java执行框架,用于接收来自客户的工作请求。工作(大小不一)被分解为一组任务,然后排队等待处理。有单独的队列来处理每种类型的任务,并且每个队列都与一个线程池相关联。ThreadPools的配置方式使引擎的整体性能达到最佳。这种设计有助于我们有效地平衡请求的负载,并且大请求不会最终占用系统资源。然而,有时当一些队列为空并且它们各自的线程池处于空闲状态时,解决方案会变得无效。为了让它变得更好,我正在考虑实现工作/任务窃取技术,以便负载较重的队列可以从其他线程池获得帮助。然而,这可能需要实现我自己的执行器,因为Java不允许多个队列与线程池相关联,并且不支持工作

java - future 任务被 ThreadPoolExecutor 拒绝

我有一个ThreadPoolExecutor,我向它提交了一个任务。privateThreadPoolExecutorthreadPoolExecutor=newThreadPoolExecutor(1,1,0L,TimeUnit.MILLISECONDS,newArrayBlockingQueue(1));此代码将Runnable提交给ThreadPoolExecutor。protectedvoidwaitAndSweep(finalStringsymbol){runnable=newRunnable(){publicvoidrun(){/*irrelevantcode*/}};tr

java - 没有队列的 ThreadPoolExecutor

我想创建一个固定大小的线程池,不允许任何任务进入其队列。换句话说,如果线程池当前正在使用中,传入的任务应该被彻底拒绝。基于documentation,在我看来,一种方法是创建一个拒绝接受任务的虚拟Queue对象。在Java中实现此目的的惯用方法是什么? 最佳答案 您可以使用SynchronousQueue在您的ThreadPoolExector中,这是一个不包含任何对象的队列。缓存线程池使用它是因为它按需创建新线程。如果无法排队,但我建议使用RejectedExecutionHandler在当前线程中运行任务。这样它将始终“立即”运

java - Spring ThreadPoolExecutor Factory Bean工厂bean的使用方法

我希望能够将ExecutorService实例注入(inject)到我的Spring服务中,SpringAPI建议为此目的使用ThreadPoolExecutorFactoryBean。很简单的问题;我到底该如何使用ThreadPoolExecutorFactoryBean创建一个可以连接到其他服务的ExecutorService?问他的问题我觉得自己像个白痴,但我似乎无法弄清楚这个问题。 最佳答案 展开skaffman'sanswer,这是一个简短而贴心的例子,说明需要做什么:再次,请参阅JavaDocs有关可以设置以配置Exec

java - 我的 ThreadPoolExecutor 是否泄漏内存?

我正在使用ThreadPoolExecutor运行任务。后端是SynchronousQueue,所以如果执行者已经在执行任务,它会抛出RejectedExecutionException.这是一个简单的测试用例:publicclassExecutorTest{finalstaticWorkerworker=newWorker();publicstaticvoidmain(String[]args){ThreadPoolExecutorexecutor=newThreadPoolExecutor(1,1,0L,TimeUnit.MILLISECONDS,newSynchronousQue

java - 在 Java 的 ThreadPoolExecutor 中重新排序队列

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:JavaExecutors:howcanIsettaskpriority?我有一个使用LinkedBlockingDequeue构建的ThreadPoolExecutor,我想操纵底层队列,但是在文档中阅读它让我非常紧张。QueuemaintenanceMethodgetQueue()allowsaccesstotheworkqueueforpurposesofmonitoringanddebugging.Useofthismethodforanyotherpurposeisstronglydiscourag

java - ThreadPoolExecutor 具有自定义行为的固定线程池

我是这个主题的新手...我正在使用通过Executors.newFixedThreadPool(10)创建的ThreadPoolExecutor,在池满后我开始得到RejectedExecutionException。有没有办法“强制”执行者将新任务置于“等待”状态,而不是拒绝它并在池释放时启动它?谢谢关于这个的问题https://github.com/evilsocket/dsploit/issues/159涉及的代码行https://github.com/evilsocket/dsploit/blob/master/src/it/evilsocket/dsploit/net/Net

java - 为什么 ThreadPoolExecutor 会在 keepAliveTime 之后将线程减少到 corePoolSize 以下?

我一直在研究使用ThreadPoolExecutor和JDK6进行线程池的不同策略。我有一个优先级队列在工作,但不确定我是否喜欢在keepAliveTime之后池没有调整大小的方式(无界队列得到的结果)。因此,我正在查看使用LinkedBlockingQueue和CallerRuns策略的ThreadPoolExecutor。我现在遇到的问题是池增加,正如文档所解释的那样,但是在任务完成并且keepAliveTime开始运行后,getPoolSize显示池减少到零。下面的示例代码应该让您了解我的问题的基础:publicclassThreadPoolingDemo{privatefina

Java ThreadPoolExecutor 在使用 ArrayBlockingQueue 时卡住

我正在开发一些应用程序并使用ThreadPoolExecutor来处理各种任务。ThreadPoolExecutor在一段时间后卡住。为了在更简单的环境中对此进行模拟,我编写了一个能够模拟该问题的简单代码。importjava.util.concurrent.ArrayBlockingQueue;importjava.util.concurrent.RejectedExecutionHandler;importjava.util.concurrent.ThreadPoolExecutor;importjava.util.concurrent.TimeUnit;publicclassMy